Первая программа на Django
Первая программа на Django
Django представляет собой высокоуровневый фреймворк для создания веб-приложений на языке Python. Фреймворк следует архитектуре модели-представления-контроллера (MVC) в её специфической интерпретации как модель-представление-шаблон (MTV). Он предоставляет готовые решения для типовых задач веб-разработки: работу с базами данных, аутентификацию пользователей, административную панель и маршрутизацию запросов. Создание первой программы позволяет познакомиться с базовой структурой проекта, определением моделей данных, созданием представлений и настройкой шаблонов отображения.
Создание проекта
Для начала работы требуется среда выполнения Python. Рекомендуется использовать виртуальное окружение для изоляции зависимостей конкретного проекта от системных библиотек компьютера. Виртуальное окружение предотвращает конфликты версий пакетов между разными проектами.
Процесс инициализации нового проекта выполняется командой в терминале. Система автоматически создаст структуру папок, установит необходимые библиотеки Django и настроит конфигурационные файлы.
# Установка Django (если еще не установлен)
pip install django
# Создание виртуального окружения (рекомендуется)
python -m venv venv
# Активация виртуального окружения
# Для Windows:
venv\Scripts\activate
# Для macOS/Linux:
source venv/bin/activate
# Создание нового проекта
django-admin startproject my_first_django_project
cd my_first_django_project
# Запуск сервера разработки
python manage.py runserver
Команда startproject создает корневую директорию проекта и файл настроек. Внутри созданной директории находится поддиректория с тем же именем, содержащая основной код приложения, и файл manage.py. Этот скрипт является интерфейсом для взаимодействия с Django, позволяя запускать сервер, создавать миграции и выполнять другие задачи управления. После запуска команды runserver приложение становится доступным по адресу http://127.0.0.1:8000/.
Структура приложения
Проект Django состоит из одного или нескольких приложений. Приложение — это модуль, отвечающий за конкретную функциональность. Например, приложение может отвечать за блог, каталог товаров или систему комментариев. Для создания первого приложения используется команда startapp.
# Переход в корень проекта
cd my_first_django_project
# Создание приложения "main"
python manage.py startapp main
После выполнения команды создается директория main с файлами конфигурации, моделями, представлениями и тестами. Чтобы приложение заработало, его необходимо зарегистрировать в списке установленных приложений в файле settings.py корневого проекта.
# my_first_django_project/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'main', # Добавляем наше приложение сюда
]
Регистрация приложения сообщает Django о необходимости подключить его модули, такие как миграции баз данных и административные панели.
Определение модели данных
Модель определяет структуру данных, которые будут храниться в базе данных. Классы моделей наследуются от models.Model, предоставляемого Django. Каждый атрибут класса соответствует столбцу в таблице базы данных.
Создадим простую модель для хранения сообщений. Файл модели находится в main/models.py.
# main/models.py
from django.db import models
class Message(models.Model):
text = models.CharField(max_length=200)
created_at = models.DateTimeField(auto_now_add=True)
is_published = models.BooleanField(default=True)
def __str__(self):
return self.text
Поле CharField определяет строковое поле максимальной длины 200 символов. Поле DateTimeField хранит дату и время создания записи, параметр auto_now_add=True автоматически устанавливает текущее время при создании объекта. Поле BooleanField хранит логическое значение истинности или ложности, по умолчанию принимая значение True. Метод __str__ возвращает строковое представление объекта, что удобно для отображения в административной панели и консоли.
Для применения изменений в структуре базы данных необходимо создать миграции. Это процесс генерации SQL-скриптов, которые обновят базу данных согласно новым моделям.
python manage.py makemigrations main
python manage.py migrate
Команда makemigrations анализирует изменения в файлах моделей и создает файлы миграций. Команда migrate применяет эти изменения к базе данных. По умолчанию используется база данных SQLite, которая создается автоматически в файле db.sqlite3.
Создание представления
Представление отвечает за обработку входящего HTTP-запроса и возврат ответа. В Django используются функции или классы. Рассмотрим создание простой функции, которая получает список всех сообщений и передает их в шаблон.
Файл представления находится в main/views.py.
# main/views.py
from django.shortcuts import render
from .models import Message
def message_list(request):
messages = Message.objects.all()
context = {
'messages': messages,
}
return render(request, 'main/message_list.html', context)
Функция принимает объект запроса request. Она обращается к базе данных через менеджер Message.objects.all(), который возвращает все объекты модели. Данные передаются в словарь контекста. Функция render объединяет шаблон HTML с контекстом и формирует ответ HTTP.
Настройка маршрутизации
Маршрутизация связывает URL-адреса с функциями представлений. Файл urls.py в корне проекта содержит глобальные маршруты. Нам нужно добавить маршрут для нашего приложения.
Сначала создадим файл urls.py внутри приложения main.
# main/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.message_list, name='message_list'),
]
Затнем подключим этот файл в главный файл urls.py проекта.
# my_first_django_project/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('main.urls')),
]
Атрибут path определяет шаблон URL. Пустая строка означает корневую часть сайта. Аргумент include указывает на подключение файлов маршрутов другого приложения. Теперь запрос к главному адресу будет перенаправляться на функцию message_list.
Создание шаблона
Шаблон определяет внешний вид страницы. Django использует движок шаблонов, который поддерживает синтаксис для динамической вставки данных. Шаблон должен находиться в директории templates/main/ внутри приложения.
Создайте файл message_list.html по пути main/templates/main/message_list.html.
<!-- main/templates/main/message_list.html -->
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Список сообщений</title>
<style>
body {
font-family: Arial, sans-serif;
background-color: #f4f4f4;
padding: 20px;
}
.container {
max-width: 600px;
margin: 0 auto;
background: white;
padding: 20px;
border-radius: 8px;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
h1 {
color: #333;
}
.message-item {
border-bottom: 1px solid #eee;
padding: 10px 0;
}
.date {
font-size: 0.8em;
color: #888;
}
</style>
</head>
<body>
<div class="container">
<h1>Все сообщения</h1>
{% if messages %}
{% for message in messages %}
<div class="message-item">
<p>{{ message.text }}</p>
<span class="date">{{ message.created_at|date:"d.m.Y H:i" }}</span>
</div>
{% endfor %}
{% else %}
<p>Сообщений пока нет.</p>
{% endif %}
</div>
</body>
</html>
Теги {% %} используются для операторов логики. Блок {% if messages %} проверяет наличие данных. Цикл {% for message in messages %} перебирает каждый объект из списка. Тег {{ }} выводит значение переменной. Фильтр |date:"..." форматирует дату вывода. Если список пуст, выводится сообщение об отсутствии данных.
Административная панель
Админ-панель Django предоставляет готовый интерфейс для управления данными без написания кода. Для доступа к ней необходимо создать суперпользователя.
python manage.py createsuperuser
Команда запросит имя пользователя, адрес электронной почты и пароль. После ввода данных можно войти по адресу http://127.0.0.1:8000/admin/.
Чтобы управлять нашей моделью Message, необходимо зарегистрировать её в админке. Файл регистрации находится в main/admin.py.
# main/admin.py
from django.contrib import admin
from .models import Message
@admin.register(Message)
class MessageAdmin(admin.ModelAdmin):
list_display = ('text', 'created_at', 'is_published')
list_filter = ('is_published', 'created_at')
search_fields = ('text',)
Аннотация @admin.register(Message) автоматически добавляет модель в админ-панель. Класс MessageAdmin настраивает отображение: list_display показывает столбцы в списке, list_filter добавляет фильтры, search_fields включает поиск по полю текста. Теперь пользователь может добавлять, редактировать и удалять сообщения через веб-интерфейс.
Расширение функционала
Полученное приложение служит базой для дальнейших экспериментов. Разработчики могут добавлять новые функции, изучая механизмы работы с данными и интерфейсом.
Добавление формы для создания новых сообщений требует создания нового представления и шаблона. Форма отправляет данные методом POST, которые обрабатываются сервером и сохраняются в базу данных.
Реализация фильтрации сообщений по дате или статусу публикации требует использования параметров запроса в URL и фильтрации queryset.
Интеграция системы комментариев предполагает создание новой модели, связанной с основным сообщением через отношение "один ко многим".
Пошаговый запуск
Для успешного запуска приложения необходимо выполнить последовательность действий.
- Установите Python с официального сайта python.org.
- Откройте терминал или командную строку.
- Создайте и активируйте виртуальное окружение.
- Установите пакет Django командой
pip install django. - Создайте проект командой
django-admin startproject my_first_django_project. - Перейдите в директорию проекта.
- Создайте приложение командой
python manage.py startapp main. - Добавьте
'main'вINSTALLED_APPSв файлеsettings.py. - Создайте файл
main/urls.pyи добавьте маршрут. - Подключите
main.urlsв главном файлеurls.py. - Создайте модель в
main/models.py. - Выполните миграции командой
python manage.py makemigrationsиpython manage.py migrate. - Создайте суперпользователя командой
python manage.py createsuperuser. - Запустите сервер командой
python manage.py runserver.
Браузер автоматически откроет страницу приложения. Любые изменения в коде сохраняются и мгновенно отображаются на странице благодаря системе горячей перезагрузки.
Рекомендации по развитию
Django предоставляет мощный инструментарий для построения сложных веб-систем. Автоматическая генерация админ-панели и ORM значительно ускоряют разработку. Компонентная архитектура позволяет строить большие системы из небольших, понятных частей.
Использование классовых представлений вместо функций рекомендуется для более сложной логики. Этот подход обеспечивает лучшую организацию кода и упрощает тестирование.
Экспериментируйте с кодом, меняйте стили, добавляйте новые состояния и функции. Практика является лучшим способом усвоения материала.